#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <string>
using namespace std;

//class Solution{
//public:
//    string reverseStr(string s, int k) {
//
//        int left = 0, right = k - 1;
//        while (left < s.size() && right < s.size())
//        {
//            int a1 = left;
//            int a2 = right;
//            while (left < right)
//            {
//                swap(s[left], s[right]);
//                left++;
//                right--;
//            }
//            left = a1;
//            right = a2;
//            left += 2 * k;
//            right += 2 * k;
//        }
//
//        if (left >= s.size())
//        {
//            return s;
//        }
//
//        if (right >= s.size())
//        {
//            right = s.size() - 1;
//            while (left < right)
//            {
//                swap(s[left], s[right]);
//                left++;
//                right--;
//            }
//        }
//        return s;
//    }
//};


//class Solution {
//public:
//    string reverseStr(string s, int k) {
//        int n = s.size();
//        for (int i = 0; i < n; i += 2 * k)
//        {
//            reverse(s.begin() + i, s.begin() + min(i + k, n));
//        }
//        return s;
//    }
//};
//int main()
//{
//    Solution A;
//    string s("abcdefg");
//    int k = 8;
//    string v = A.reverseStr(s, k);
//    cout << v << endl;
//
//    return 0;
//}
//
//int main()
//{
//	int i = 0;
//	string s("hello world");
//	i = s.find(' ');
//	cout << i << endl;
//
//	return 0;
//}

//class Solution {
//public:
//    string reverseWords(string s) {
//        size_t left = 0, right = s.find(' ');
//        while (right != string::npos)
//        {
//            reverse(s.begin() + left, s.begin() + right);
//            left = right + 1;
//            right = s.find(' ', left);
//        }
//
//        reverse(s.begin() + left, s.end());
//        return s;
//    }
//};
//
//int main()
//{
//    Solution A;
//    string s("Let's take LeetCode contest");
//    cout << A.reverseWords(s) << endl;
//    return 0;
//}


//int main()
//{
//	string s("mynameis");
//	reverse(s.begin() + 0, s.begin() + 4);
//	cout << s << endl;
//	return 0;
//}

class Solution {
public:
    string addStrings(string num1, string num2) {
        int i1 = num1.size() - 1;
        int i2 = num2.size() - 1;
        string str;
        int flag = 0;

        while (i1 >= 0 || i2 >= 0)
        {
            int x1 = i1 >= 0 ? num1[i1] - '0' : 0;
            int x2 = i2 >= 0 ? num2[i2] - '0' : 0;

            int ret = x1 + x2 + flag;
            flag = ret / 10;
            ret %= 10;

            str += ('0' + ret);
            i1--;
            i2--;
        }
        if (flag == 1)
        {
            str += '1';
        }

        reverse(str.begin(), str.end());
        return str;
    }

    string multiply(string num1, string num2) {
        int m1 = num1.size() - 1;
        int m2 = num2.size() - 1;


        string n;
        string i("");
        while (m2 >= 0)
        {
            string s("");
            int flag = 0;
            while (m1 >= 0)
            {
                int x = num1[m1] * num1[m2] + flag;
                flag /= x;
                s += x % 10;
                m1--;
            }
            reverse(s.begin(), s.end());
            s += i;
            i += "0";
            n = addStrings(s, n);
            m2--;
        }
        return n;
    }
};

int main()
{
    Solution A;
    string num1("123");
    string num2("45");
    string n = A.multiply(num1, num2);
    cout << n << endl;
    return 0;
}